【MySQL】DISTINCT - 重複データの除外
MySQLのDISTINCTについて解説します。
検証環境
DISTINCT
DISTINCT句は“SELECT文の取得レコード(データ)の重複データを除外する句”です。
全ての取得カラムの値が同じレコードを重複とみなすため、一部の値のみ同じレコードは除外されません。
基本構文
SELECT DISTINCT カラム FROM テーブル
DISTINCT
をSELECT
の次に記述します。
サンプル
mysql> SELECT * FROM items;
+----+-----------+-------+-------+
| id | name | price | stock |
+----+-----------+-------+-------+
| 1 | Apple | 200 | 10 |
| 2 | Orange | 150 | 3 |
| 3 | Apple | 300 | 5 |
| 4 | Pineapple | 1100 | 1 |
| 5 | Grapes | 3500 | 1 |
| 6 | Pineapple | 2000 | 3 |
| 7 | Apple | 300 | 5 |
+----+-----------+-------+-------+
7 rows in set (0.00 sec)
___ih_hl_start
mysql> SELECT DISTINCT name FROM items;
___ih_hl_end
+-----------+
| name |
+-----------+
| Apple |
| Orange |
| Pineapple |
| Grapes |
+-----------+
4 rows in set (0.00 sec)
15行目がDISTICT句を使ったSELECT文です。
items
テーブルのname
カラムは値の重複(Apple
など)がありますが、DISTINCT句によって重複が除外されます。
また、DISTINCT句は全ての取得カラムの値が重複する場合のみ除外します。
___ih_hl_start
mysql> SELECT DISTINCT name, price FROM items;
___ih_hl_end
+-----------+-------+
| name | price |
+-----------+-------+
| Apple | 200 |
| Orange | 150 |
| Apple | 300 |
| Pineapple | 1100 |
| Grapes | 3500 |
| Pineapple | 2000 |
+-----------+-------+
6 rows in set (0.00 sec)
この場合、クエリ結果からid
カラムが3
と7
のレコードのみが重複するとみなされたことが分かります。